package apps.servicios;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import ups.apps.model.Movimiento;
import ups.apps.negocio.MovimientoDAO;
import apps.modelo.MensajeRespuesta;

import com.google.inject.PrivateBinder;


@Path(value="Transferencia")
public class WsRestTransferencia {
	
	@Inject
	private EntityManager em;
	
	@Inject
	private MovimientoDAO mDao;
	/**
	 * metodo que devuelve las transacciones realizadas por un cliente
	 * 
	 * @param cuenta
	 * @return lista
	 */
	@GET
	@Path(value = "datos")
	@Produces("application/json")
	public List<Movimiento> movimientos(@QueryParam("cuenta")String cuenta){
		String sql = "SELECT m From Movimiento m WHERE m.cuenta = :cuenta";
		Query q = em.createQuery(sql, Movimiento.class);
		q.setParameter("cuenta", cuenta);		
		List<Movimiento> lista = q.getResultList();
		return lista;
	}
	
	
	/**
	 * Metodo para ingresar transferencia
	 * @param movimiento
	 * @return
	 */
	@POST // @PUT PARA INSERTAR
	@Path("insertar")
	@Produces("application/json")
	@Consumes("application/json")
	public MensajeRespuesta generarTransaccion(Movimiento movimiento){
		
		MensajeRespuesta respuesta=new MensajeRespuesta();
		respuesta.setFecha(new Date());
		try{
			System.out.println("Saldo "+movimiento.getMovDebe());
			mDao.transfer(movimiento.getCuenta().getCueNumero(),movimiento.getMovMonto(), movimiento.getTipomovimiento().getTmoId(), movimiento.getMovCedula(), movimiento.getMovCliente(), movimiento.getMovCuenta());
			respuesta.setCodigo(0);
			respuesta.setMensaje("OK");
		}catch(Exception e){
			respuesta.setCodigo(111);
			System.out.println("Falla en transferencia "+movimiento.getCuenta().getCueNumero());
			respuesta.setMensaje(e.toString());			
		}		
		return respuesta;
	}
}
